package com.hlx.utils;

import lombok.Data;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

//        该代码是根据时间戳来生成14位的时间格式编号，
//        后面getRandom方法又是随机生成6位数的编码，
//        这样订单编码就是20位，中间有6位并发线程。
//        中间的6为随机号可以承载的并发量也就是10万级别的，保证在一秒以内生成的订单编号就不会出现重复，
//        里面设置了24位数的限制，如果不满24位数可以通过0来补齐，在实际的开发当中也可能生成固定位数订单编码，
//        所以是可以通过这个长度来进行控制，满足实际的开发需求。

@Data
public class OrderNoCreate {

    private String orderNumber;

    public OrderNoCreate() {
        SimpleDateFormat dmDate = new SimpleDateFormat("yyyyMMddHHmmss");
        String randata = getRandom(6);
        Date date = new Date();
        String dateran = dmDate.format(date);
        String orderNo = "TS" + dateran + randata;
        if (orderNo.length() < 24) {
            orderNo = orderNo + 0;
        }
        this.orderNumber = orderNo;
        System.out.println(orderNo);
    }

    public String getRandom(int len) {
        Random r = new Random();
        StringBuilder rs = new StringBuilder();
        for (int i = 0; i < len; i++) {
            rs.append(r.nextInt(10));
        }
        return rs.toString();
    }
}

